<?php
declare (strict_types = 1);

namespace app\middleware;
use app\model\Auth as AuthModel;
class Auth
{

    private $toast = 'public/toast';
    /**
     * 处理请求
     *
     * @param \think\Request $request
     * @param \Closure       $next
     * @return Response
     */
    public function handle($request, \Closure $next)
    {
        //先得到登录管理员
        $auth = AuthModel::where('name', session('admin'))->find();
        //得到当前管理员的角色 id 列表
        $roles = [];
        //遍历角色列表
        foreach ($auth->role as $key=>$obj) {
        //将权限 uri 取出，装进
            foreach (explode(',', $obj->uri) as $value) {
                $roles[] = $value;
            }
        }
        //如果检测到是超级管理员就给全部权限，
        //但主要注意细节，前端如果选择了超管，则不能选别的角色
        if ($roles[0] != 'All') {
        //得到当前访问的 uri
            $uri = $request->controller().'/'.$request->action();
            //如果不在权限范围内，则提示
            if (!in_array($uri, $roles)) {
                return view($this->toast, [
                    'infos' => ['你没有操作权限~'],
                    'url_text' => '返回首页',
                    'url_path' => url('/login')
                ]);
            }
        }
        return $next($request);
    }

}
